package com.biblioteca.controlador;

import java.io.Serializable;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.biblioteca.persistencia.*;
import com.biblioteca.servicio.*;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import java.util.Iterator;
import java.util.List;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;


@Controller("votoControlador")
@Scope
public class votoControlador implements Serializable {

    private VotoServicio votoServicio;
    private Voto votoSeleccionado;
    private UsuarioServicio usuarioServicio;
    private int rating1;

    @PostConstruct
    public void iniciar() {
        this.votoSeleccionado = new Voto();
    }


    @Required
    @Autowired
    public void setVotoServicio(VotoServicio votoServicio) {
        this.votoServicio = votoServicio;
    }

    @Required
    @Autowired
    public void setUsuarioServicio(UsuarioServicio usuarioServicio) {
        this.usuarioServicio = usuarioServicio;
    }

    public Voto getVotoSeleccionado() {
        return votoSeleccionado;
    }

    public void setVotoSeleccionado(Voto votoSeleccionado) {
        this.votoSeleccionado = votoSeleccionado;
    }

    public Voto getVoto() {
        return votoSeleccionado;
    }

    public void setVoto(Voto voto) {
        this.votoSeleccionado = voto;
    }

    public int getRating1() {
        return rating1;
    }

    public void setRating1(int rating1) {
        this.rating1 = rating1;
    }

    public void votar(Libro libro) {
            Usuario usuario = usuarioServicio.getCurrentUser();
            votoServicio.crear(rating1, libro, usuario);
            rating1=0;

        FacesContext ctx = FacesContext.getCurrentInstance();
        ctx.addMessage(null, new FacesMessage("Correcto", "has votado correctamente"));


    }

    public int getMedia(Libro libro) {
        List<Key> votos = libro.getVotos();
        if(votos == null){
            return 0;
        }else{
            double p=0;
            for(int i = 0; i < votos.size(); i++){
                Voto voto = votoServicio.findVoto(votos.get(i));
                p = p + voto.getVoto();
            }
            return (int) (p / votos.size());
        }
    }
    
    public int getNumVotos(Libro libro){
        List<Key> numVotos = libro.getVotos();
        if(numVotos == null){
            return 0;
        }else{     
            return numVotos.size();
        }
    }
}
